/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import com.thoughtworks.xstream.XStream;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 *
 * @author francisco tiapa
 */
public class LeerXmlInterno {
 private Connection conexion;
 protected final Log logger = LogFactory.getLog(getClass());

     public ObjetoXML LeeObjeto(String ruta)

{
try 
  {
  XStream xstream = new XStream();
  xstream.alias("evento", ObjetoXML.class);
  ObjetoXML elObjeto = (ObjetoXML) xstream.fromXML(new FileInputStream(ruta+"Eventos.xml"));
  return elObjeto;
  }
  catch (Exception e) 
  {
  logger.info("no encuentro el archivo eventos");
  return null;
  }
 }
  // Esta funcion se encarga de leer los eventos del xml y cargarlos en la lista para luego ser cargados en la base de datos
public  ListaObjetoXML LeeListaObjeto(String ruta)
{
 XStream xstream = new XStream();

ListaObjetoXML laLista=new ListaObjetoXML();
xstream.alias("evento", ObjetoXML.class);
xstream.alias("TagListaObjeto",ListaObjetoXML.class);

xstream.addImplicitCollection(ListaObjetoXML.class, "laLista");
        try {
            laLista.setLaLista((List<ObjetoXML>) xstream.fromXML(new FileInputStream(ruta+"Eventos.xml")));
            return laLista;
            }
        catch (Exception e)
           {
           logger.info("no encuentro el archivo eventos");
           return null;
           }
}


    public  ListaCategoriaXML LeeListaCategoria(String ruta)
        {
        XStream xstream = new XStream();

        ListaCategoriaXML laLista_c=new ListaCategoriaXML();
        xstream.alias("categoria", CategoriaXML.class);
        xstream.alias("TagListaObjeto",ListaCategoriaXML.class);

        xstream.addImplicitCollection(ListaCategoriaXML.class, "laLista_c");
                try {
                    laLista_c.setLaLista_c((List<CategoriaXML>) xstream.fromXML(new FileInputStream(ruta+"Categoria.xml")));
                    return laLista_c;
                    }
                catch (Exception e)
                   {
                   logger.info("no encuentro el archivo categoria");
                   return null;
                   }
        }
        public  ListaParticipanteXML LeeListaParticipante(String ruta)
        {
        XStream xstream = new XStream();

        ListaParticipanteXML laLista_p=new ListaParticipanteXML();
        xstream.alias("participante", ParticipanteXML.class);
        xstream.alias("TagListaObjeto",ListaParticipanteXML.class);

        xstream.addImplicitCollection(ListaParticipanteXML.class, "laLista_p");
                try {
                    laLista_p.setLaLista_p((List<ParticipanteXML>) xstream.fromXML(new FileInputStream(ruta+"Participante.xml")));
                    return laLista_p;
                    }
                catch (Exception e)
                   {
                   logger.info("no encuentro el archivo participante");
                   return null;
                   }
        }

        public  ListaMaquinaXML LeeListaMaquina(String ruta)
        {
        XStream xstream = new XStream();

        ListaMaquinaXML laLista_m=new ListaMaquinaXML();
        xstream.alias("maquina", MaquinaXML.class);
        xstream.alias("TagListaObjeto",ListaMaquinaXML.class);

        xstream.addImplicitCollection(ListaMaquinaXML.class, "laLista_m");
                try {
                    laLista_m.setLaLista_m((List<MaquinaXML>) xstream.fromXML(new FileInputStream(ruta+"Maquina.xml")));
                    return laLista_m;
                    }
                catch (Exception e)
                   {
                   logger.info("no encuentro el archivo maquina");
                   return null;
                   }
        }

        public void cargarXML(String ruta) throws SQLException{
        try {
        //actualizo el estado de la maquina
        ConexionBD c = new ConexionBD();
        conexion = c.conectarBD();
        EscribeXML escribe = new EscribeXML();
        LeerXmlInterno lee = new LeerXmlInterno();
        ListaMaquinaXML lalista_m = new ListaMaquinaXML();
        lalista_m = new ListaMaquinaXML();
        lalista_m = lee.LeeListaMaquina(ruta);
        lalista_m.updatemaquinaBd();
        String status = null;
        // hago un query para que me devuelva si la maquina esta activa
        String query = "SELECT * FROM maquinas ";
        PreparedStatement ps = conexion.prepareStatement(query);
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
           status= rs.getString(6);
        }
        /// hago un if que verifique que el satus de la maquina es activa

           
            /// declaro todas las listas
            ListaObjetoXML laLista = new ListaObjetoXML();
            ListaCategoriaXML laLista_c = new ListaCategoriaXML();
            ListaParticipanteXML laLista_p = new ListaParticipanteXML();
            //  inserto en la lista maquinas y en kla
            laLista = new ListaObjetoXML();
            laLista = lee.LeeListaObjeto(ruta);
            //laLista.MostrarLista();
            laLista.insertarObjetoBd();
            laLista_c = new ListaCategoriaXML();
            laLista_c = lee.LeeListaCategoria(ruta);
            //laLista_c.MostrarLista_c();
            laLista_c.insertarCategoriaBd();
            laLista_p = new ListaParticipanteXML();
            laLista_p = lee.LeeListaParticipante(ruta);
            //laLista_p.MostrarLista_p();
            laLista_p.insertarparticipanteBd();

        } catch (SQLException ex) {
            Logger.getLogger(LeerXmlInterno.class.getName()).log(Level.SEVERE, null, ex);
        }
        conexion.close();
        }

    /**
     * @return the ruta
     */

}
